﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Cesave.DistributedServices.PermisosModule.WindowsHost.ViewModelBase;
using Cesave.DistributedServices.PermisosModule.WindowsHost.Views.Catalogs.Cultivos;
using System.Globalization;
using Cesave.DistributedServices.PermisosModule.WindowsHost.Resources;
using System.Windows.Forms;

namespace Cesave.DistributedServices.PermisosModule.WindowsHost.ViewModels.Catalogs.Cultivos
{
	/// <summary>
	/// Controlador del catálogo de cultivos.
	/// </summary>
	public partial class CultivosViewModel
		: ObservableObject
	{
		#region Private properties

		/// <summary>
		/// Referencia a la vista
		/// </summary>
		private CultivosView _view;

		#endregion

		#region Constructor

		/// <summary>
		/// Referencia a la vista.
		/// </summary>
		/// <param name="view"></param>
		public CultivosViewModel(CultivosView view)
		{
			if (view == null)
				throw new ArgumentNullException("view");
			_view = view;
			WireUpEvents();
			InitModels();
		}

		#endregion

		#region Event methods

		/// <summary>
		/// Suscribe los elementos de la vista a los eventos
		/// correspondientes
		/// </summary>
		private void WireUpEvents()
		{
			PropertyChanged += new System.ComponentModel.PropertyChangedEventHandler(CultivosViewModel_PropertyChanged);
			_view.Load += LoadView;
			_view.closeButton.Click += (sender, e) =>
			{
				_view.Close();
			};
			_view.saveButton.Click += SaveCultivos;
			_view.cultivoBindingNavigatorSaveItem.Click += SaveCultivos;
			_view.newButton.Click += AddNewCultivo;
			_view.bindingNavigatorAddNewItem.Click += AddNewCultivo;
		}

		/// <summary>
		/// Se dispara al cargar la vista.
		/// </summary>
		private void LoadView(object sender, EventArgs e)
		{
			_view.Text = string.Format(CultureInfo.InvariantCulture,
				WindowTitles.CultivosWindowTitle
			);
		}

		#endregion

		#region Private methods

		/// <summary>
		/// Carga los datos iniciales.
		/// </summary>
		private void InitModels()
		{
			// Clasificaciones de cultivo.
			LoadClasificaciones();
			// Estaciones de siembra
			LoadEstaciones();
			// Cultivos
			LoadCultivos();
		}

		/// <summary>
		/// Muestra algún mensaje de error.
		/// </summary>
		/// <param name="message">
		/// Mensaje a mostrar
		/// </param>
		private void ShowMessage(string message)
		{
			MessageBox.Show(
				_view,
				message,
				WindowTitles.CultivosWindowTitle,
				MessageBoxButtons.OK,
				MessageBoxIcon.Error
			);
		}

		/// <summary>
		/// Atajo para poner iniciar la barra de espera
		/// de la vista.
		/// </summary>
		private void StartWaiting()
		{
			_view.WaitingBar.StartWaiting();
		}

		/// <summary>
		/// Atajo para detener la barra de espera
		/// de la vista.
		/// </summary>
		private void EndWaiting()
		{
			_view.WaitingBar.EndWaiting();
		}

		/// <summary>
		/// Pone el cursor en el control indicado.
		/// </summary>
		private void FocusDefaultControl(Control control = null)
		{
			if (control == null)
				control = _view.nombreUltraTextEditor;
			_view.ActiveControl = control;
		}

		#endregion

	}
}
